home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 24
/
Amiga Format AFCD24 (Feb 1998, Issue 108).iso
/
-seriously_amiga-
/
shareware
/
programming
/
other
/
pmdev
/
demos
/
pulldownmenu.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-01-05
|
5KB
|
179 lines
//
// $VER: TestMenu.c 2.0 (11.10.97)
//
// Popup Menu example program
//
// ©1996-1997 Henrik Isaksson
// All Rights Reserved.
//
// Run and click the mouse in the window!
//
#include <intuition/intuition.h>
#include <exec/memory.h>
#include <clib/intuition_protos.h>
#include <clib/exec_protos.h>
#include <clib/alib_protos.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <libraries/pm.h>
#include <proto/pm.h>
struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
struct PopupMenuBase *PopupMenuBase;
struct Window *w; // This window is only needed to find out when and where the menu should appear.
// The font in this window's rastport will be used for the menu.
ULONG __saveds __asm MenuHandlerFunc(register __a0 struct Hook *hook,
register __a2 APTR object,
register __a1 APTR msg)
{
struct PopupMenu *pm=(struct PopupMenu *)object;
printf("---\n");
printf("Title: \"%s\"\n", pm->Title);
printf("UserData: %lx\n", pm->UserData);
printf("ID: %lx\n", pm->ID);
// This is one (the fastest) way of finding out if the item is checked or not:
// 0x40000000 = CHECKIT
// 0x80000000 = CHECKED
if(pm->Flags&0x40000000)
printf("Checked? %s\n", pm->Flags&0x80000000?"Yes":"No");
if((int)pm->UserData==5) *((BOOL *)hook->h_Data)=FALSE;
}
struct PopupMenu *MakeTestMenu(void);
void main()
{
BOOL r=TRUE;
struct IntuiMessage *im,imsg;
struct PopupMenu *p;
struct Hook MenuHandler;
MenuHandler.h_Entry=(HOOKFUNC)MenuHandlerFunc;
MenuHandler.h_Data=&r;
PopupMenuBase=(struct PopupMenuBase *)OpenLibrary(POPUPMENU_NAME,POPUPMENU_VERSION); // Open the library
if(PopupMenuBase) {
IntuitionBase=(struct IntuitionBase *)PopupMenuBase->pmb_IntuitionBase; // We let popupmenu.library open the libraries we need
GfxBase=(struct GfxBase *)PopupMenuBase->pmb_GfxBase; // They remain valid until the library is closed!
p=MakeTestMenu(); // Declared at the end of this file.
if(p) {
w=OpenWindowTags(NULL, WA_IDCMP, IDCMP_CLOSEWINDOW|IDCMP_MOUSEBUTTONS|IDCMP_VANILLAKEY, // Open a little window
WA_RMBTrap, TRUE,
WA_DragBar, TRUE,
WA_Width, 150,
WA_Height, 100,
WA_Left, 0,
WA_Top, 100,
WA_Title, "PullDown Menus",
WA_CloseGadget, TRUE,
TAG_DONE);
if(w) {
while(r) {
WaitPort(w->UserPort); // Wait for a message
while((im=(struct IntuiMessage *)GetMsg(w->UserPort))) { // Get the message
CopyMem(im,&imsg,sizeof(struct IntuiMessage)); // Copy the contents of it
ReplyMsg((struct Message *)im); // Reply the message
PM_FilterIMsg(w, p, &imsg, // Send the message to pmlib
PM_AutoPullDown, TRUE, // We want the menu to open automatically
PM_MenuHandler, &MenuHandler, // Our menuhandler function
TAG_DONE);
if(imsg.Class==IDCMP_CLOSEWINDOW) r=FALSE; // See if the user wants to quit
}
}
CloseWindow(w);
} else printf("Window error!\n");
PM_FreePopupMenu(p);
} else printf("Menu error!\n");
CloseLibrary((struct Library *)PopupMenuBase);
}
}
struct PopupMenu *MakeTestMenu()
{
struct PopupMenu *p;
p=PM_MakeMenu(
PMItem("Workbench"),
PMSimpleSub,
PMCheckItem("Backdrop?", 1), PM_CommKey, "B", End,
PMItem("Execute Command..."), PM_CommKey, "E", End,
PMItem("Redraw All"), End,
PMItem("Update All"), End,
PMItem("Last Message"), End,
PMItem("About..."), PM_BuiltInIcon, PMIMG_ABOUT, PM_CommKey, "?", End,
PMItem("Quit"), PM_BuiltInIcon, PMIMG_QUIT, PM_UserData, 5, PM_CommKey, "Q", End,
End,
End,
PMItem("Window"),
PMSimpleSub,
PMItem("New Drawer"), PM_CommKey, "N", PM_Disabled, TRUE, End,
PMItem("Open Parent"), PM_Disabled, TRUE, End,
PMItem("Close"), PM_CommKey, "K", PM_Disabled, TRUE, End,
PMItem("Update"), PM_Disabled, TRUE, End,
PMItem("Select Contents"), PM_CommKey, "A", End,
PMItem("Clean Up"), PM_CommKey, ".", End,
PMItem("Snapshot"),
PMSimpleSub,
PMItem("Window"), End,
PMItem("All"), End,
End,
End,
PMItem("Show"),
PMSimpleSub,
PMCheckItem("Only Icons", 2), PM_Exclude, PM_ExLst(3, 0), PM_Checked, TRUE, End,
PMCheckItem("All Files", 3), PM_Exclude, PM_ExLst(2, 0), End,
End,
PM_Disabled, TRUE,
//PM_BuiltInIcon, PMIMG_SHOW,
End,
PMItem("View By"),
PMSimpleSub,
PMCheckItem("Icon", 4), PM_Exclude, PM_ExLst(5, 6, 7, 0), PM_Checked, TRUE, End,
PMCheckItem("Name", 5), PM_Exclude, PM_ExLst(4, 6, 7, 0), End,
PMCheckItem("Date", 6), PM_Exclude, PM_ExLst(4, 5, 7, 0), End,
PMCheckItem("Size", 7), PM_Exclude, PM_ExLst(4, 5, 6, 0), End,
End,
PM_Disabled, FALSE,
End,
End,
End,
PMItem("Icons"),
PMSimpleSub,
PMItem("Open"), PM_CommKey, "O", End,
PMItem("Copy"), PM_CommKey, "C", End,
PMItem("Rename..."), PM_CommKey, "R", End,
PMItem("Information..."), PM_CommKey, "I", End,
PMItem("Snapshot"), PM_CommKey, "S", End,
PMItem("UnSnapshot"), PM_CommKey, "U", End,
PMItem("Leave Out"), PM_CommKey, "L", End,
PMItem("Put Away"), PM_CommKey, "P", End,
PMBar, End,
PMItem("Delete..."), PM_Disabled, TRUE, End,
PMItem("FormatDisk..."), End,
PMItem("Empty Trash"), PM_Disabled, TRUE, End,
End,
End,
PMItem("Tools"),
PMSimpleSub,
PMItem("ResetWB"), End,
End,
End,
End;
return p;
}